/*
Mem.Get("key"); //获取值
Mem.Put("key","值支持对象更新部分","时间"); //更新值 可以只更新时间 时间0不过期 值不存在返回 false
Mem.Set(key,value,"时间");//设置或者新增值 
Mem.Add(key,"默认值1",time);//增加值  支持时间过期
Mem.Cut(key,"默认值1",time);//减少值 支持时间过期
DMem.Del(key);//删除
DMem.Flush(key);// key 为空清理全部  不为空删除包含关键词
*/
var Kuo_Cache_CacheFile = {
    Table:{},
    DB : null,
    //配置参数 Mode("Tools").Time()
    Config:(config)=>{
        if(config && config.dbname){
            Kuo_Cache_CacheFile.DB =temp+config.dbname+'.Kuo';
        }else{
            Kuo_Cache_CacheFile.DB =temp+'CacheFile.Kuo';
        }
        try {
            var neirong = FS.readFileSync(Kuo_Cache_CacheFile.DB);
            if(neirong){
                neirong =  JSON.parse(ZLIB.unzipSync(neirong));
                if(neirong){
                    Kuo_Cache_CacheFile.Table = neirong;
                }
            }
        } catch (error) {
            Kuo_Cache_CacheFile.Table = {};
        }
        return Kuo_Cache_CacheFile;
    },Get:(key)=>{
        /*获取数据 */
        if(typeof(Kuo_Cache_CacheFile.Table[key]) == "undefined"){
           return null;
        }
        if(Kuo_Cache_CacheFile.Table[key][1] > 0 && Mode("Tools").Time() > Kuo_Cache_CacheFile.Table[key][1]){
            Kuo_Cache_CacheFile.Del(key);
            return null;
        }
        return Kuo_Cache_CacheFile.Table[key][0];
    },Put:(key,value,time)=>{
        /*更新*/
        if(!key){
            return false;
        }
        if(!time){
            time = 0;
        }
        if(value){
            var zhi =  Kuo_Cache_CacheFile.Get(key);
            if(zhi && typeof(zhi) == typeof(value)){
                for(var k in value){
                    zhi[k] = value[k];
                }
                value = zhi;
            }
        }
        return  Kuo_Cache_CacheFile.Set(key,value,time);
        
    },Set:(key,value,time)=>{
        /**设置值  */
        if(!key){
            return false;
        }
        if(!time){
            time = 0;
        }
        if(time > 0){
            time += Mode("Tools").Time();
        }
        if(value){
            Kuo_Cache_CacheFile.Table[key]= [value,time];
        }else{
            if(Kuo_Cache_CacheFile.Table[key]){
                Kuo_Cache_CacheFile.Table[key][1] = time;
            }else{
                Kuo_Cache_CacheFile.Table[key]= [null,time];
            }
        }
        
        return true;

    },Add:(key,value,time)=>{
        /* 增加 */
        if(!time){
            time = 0;
        }
        if(!value){
            value = 1;
        } 
        var zhi = Kuo_Cache_CacheFile.Get(key);
        if(!zhi){
            zhi = 0;
        }
        if(isNaN(zhi)){
            zhi = 0;
        }
        zhi = Number(zhi*1);
        zhi += Number(value);
        Kuo_Cache_CacheFile.Set(key,zhi,time);
        return zhi;

    },Cut:(key,value,time)=>{
        /* 减少 */
        if(!time){
            time = 0;
        }
        if(!value){
            value = 1;
        }
        var zhi = Number(Kuo_Cache_CacheFile.Get(key));
        if(!zhi){
            zhi = 0;
        }
        if(isNaN(zhi)){
            zhi = 0;
        }
        zhi = Number(zhi*1);
        zhi -= Number(value);
        Kuo_Cache_CacheFile.Set(key,zhi,time);
        return zhi;
    },Del:(key)=>{
        /*删除缓存 */
        if(Kuo_Cache_CacheFile.Table[key]){
            delete Kuo_Cache_CacheFile.Table[key];
            //Kuo_Cache_CacheFile.Save();
            return true;
        }else{
            return false;
        }

    },Total:()=>{
        /*统计数据 */
        return Object.getOwnPropertyNames(Kuo_Cache_CacheFile.Table).length;
    },Flush:(key)=>{
        /*清空数据 */
        if(key){
            for(var k in Kuo_Cache_CacheFile.Table){
                if(k.indexOf(key) > -1){
                    delete Kuo_Cache_CacheFile.Table[k]
                }
            }

        }else{
            Kuo_Cache_CacheFile.Table = {};
        }
        //Kuo_Cache_CacheFile.Save();
        return true;

    },Save:()=>{
        /* 预留接口存档 */
        FS.writeFileSync(Kuo_Cache_CacheFile.DB, ZLIB.gzipSync(JSON.stringify(Kuo_Cache_CacheFile.Table)));
    }

};
module.exports = Kuo_Cache_CacheFile;